package aceim.app.utils;
import aceim.api.utils.Logger;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
public abstract class PluginsManager {
protected final String packagePrefix;
protected final Context mContext;
private final PackageBroadcastReceiver packageBroadcastReceiver;
private final IntentFilter packageFilter;
protected PluginsManager(Context context, String packagePrefix) {
this.mContext = context;
this.packagePrefix = packagePrefix;
packageBroadcastReceiver = new PackageBroadcastReceiver();
packageFilter = new IntentFilter();
packageFilter.addAction( Intent.ACTION_PACKAGE_ADDED );
packageFilter.addAction( Intent.ACTION_PACKAGE_REPLACED );
packageFilter.addAction( Intent.ACTION_PACKAGE_REMOVED );
packageFilter.addCategory( Intent.CATEGORY_DEFAULT );
packageFilter.addDataScheme( "package" );
mContext.registerReceiver( packageBroadcastReceiver, packageFilter );
}
private class PackageBroadcastReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
String intentSource = intent.getData().getSchemeSpecificPart();
if (intentSource.startsWith(packagePrefix)) {
Logger.log("Protocol broadcast receiver caught: " + intent.getAction()+" "+intent.getDataString());
if (intent.getAction().equals(Intent.ACTION_PACKAGE_ADDED) || intent.getAction().equals(Intent.ACTION_PACKAGE_REPLACED)) {
onPackageAdded(intentSource);
} else if (intent.getAction().equals(Intent.ACTION_PACKAGE_REMOVED)) {
onPackageRemoved(intentSource);
}
}
}
}
/**
* @return the mContext
*/
public Context getContext() {
return mContext;
}
public void onExit(){
mContext.unregisterReceiver(packageBroadcastReceiver);
}
protected abstract void onPackageAdded(String packageName);
protected abstract void onPackageRemoved(String packageName);
}